/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.cip.esymons.colegiatura.beans;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletResponse;
import org.apache.myfaces.custom.fileupload.UploadedFile;
import org.cip.esymons.colegiatura.bc.ColegiadoDelegate;
import org.cip.esymons.colegiatura.bc.ColegiadoImagenDelegate;
import org.cip.esymons.colegiatura.bc.DocumentoDelegate;
import org.cip.esymons.colegiatura.bc.DocumentoImagenDelegate;
import org.cip.esymons.colegiatura.bc.GeneraCuotasDelegate;
import org.cip.esymons.colegiatura.bc.PagoColegiaturaDelagate;
import org.cip.esymons.colegiatura.bc.TransferenciaDelegate;
import org.cip.esymons.colegiatura.bc.solicitanteDelegate;
import org.cip.esymons.colegiatura.be.Colegiado;
import org.cip.esymons.colegiatura.be.ColegiadoImagen;
import org.cip.esymons.colegiatura.be.TipoColegiado;
import org.cip.esymons.colegiatura.be.Transferencia;
import org.cip.esymons.general.be.PersonaNatural;
import org.cip.esymons.tramite.be.Documento;
import org.cip.esymons.tramite.be.DocumentoImagen;

/**
 *
 * @author ADMINISTRADOR
 */
public class transferenciaController {

    private TransferenciaDelegate delegado;
    private ColegiadoDelegate colegiadoDelegado;
    private PagoColegiaturaDelagate delegadoPago;
    private GeneraCuotasDelegate delegadoCuotas;
    private DocumentoDelegate delegadoDocumento;
    private DocumentoImagenDelegate delegadoDocumentoImagen;
    private ColegiadoImagenDelegate delegadoColImagen;
    private solicitanteDelegate delegadoSolicitante;

    private Transferencia transferencia;
    private TipoColegiado tipoColegiado;
    private Colegiado colegiado;
    private Documento documento;
    private DocumentoImagen documentoImagen;
    private String codigoCIP;
    private Integer cantidad;
    private PersonaNatural persona;

    private String numeroDocumento;
    private String dirDocumento;
    private boolean estado;
    private Boolean noHallado,mostrarTrans,tipoTransferencia,oculto;

    private Date fecha1,fecha2,fechaIni, fechaFin;
    List<Transferencia> listaTransferencias;
    private Integer seleccion,opcion;
    private Date fechaBloqueoCuota,fechaFinAporte,fechaAporte ;
    private String nombres,apePaterno, apeMaterno, dni;

    List<PersonaNatural> listaPersonasFotos;
    List<PersonaNatural> listaPersonas;
    
    public transferenciaController() {

        delegado = new TransferenciaDelegate();
        colegiadoDelegado = new ColegiadoDelegate();
        delegadoPago = new PagoColegiaturaDelagate();
        delegadoCuotas = new GeneraCuotasDelegate();
        delegadoDocumento = new DocumentoDelegate();
        delegadoDocumentoImagen = new DocumentoImagenDelegate();
        delegadoColImagen = new ColegiadoImagenDelegate();
        delegadoSolicitante = new solicitanteDelegate();

        transferencia = new Transferencia();
        colegiado = new Colegiado();
        tipoColegiado = new TipoColegiado();
        documento = new Documento();
        documentoImagen = new DocumentoImagen();
        listaTransferencias = new ArrayList<Transferencia>();
        listaTransferencias = null;
        listaPersonasFotos = new ArrayList<PersonaNatural>();
        listaPersonasFotos = null;
        listaPersonas = new ArrayList<PersonaNatural>();
        listaPersonas = null;
        persona = new PersonaNatural();

        dirDocumento = "/modulos/colegiatura/archivos/documento/";
        estado = false;
        noHallado = false;
        mostrarTrans = false;
        tipoTransferencia = false;
        oculto = false;
    }

    public Boolean getOculto() {
        return oculto;
    }

    public void setOculto(Boolean oculto) {
        this.oculto = oculto;
    }

    public Boolean getTipoTransferencia() {
        return tipoTransferencia;
    }

    public void setTipoTransferencia(Boolean tipoTransferencia) {
        this.tipoTransferencia = tipoTransferencia;
    }

    public Integer getOpcion() {
        return opcion;
    }

    public void setOpcion(Integer opcion) {
        this.opcion = opcion;
    }

    
    public Boolean getMostrarTrans() {
        return mostrarTrans;
    }

    public void setMostrarTrans(Boolean mostrarTrans) {
        this.mostrarTrans = mostrarTrans;
    }

    public PersonaNatural getPersona() {
        return persona;
    }

    public void setPersona(PersonaNatural persona) {
        this.persona = persona;
    }

    public ColegiadoImagenDelegate getDelegadoColImagen() {
        return delegadoColImagen;
    }

    public void setDelegadoColImagen(ColegiadoImagenDelegate delegadoColImagen) {
        this.delegadoColImagen = delegadoColImagen;
    }

    public solicitanteDelegate getDelegadoSolicitante() {
        return delegadoSolicitante;
    }

    public void setDelegadoSolicitante(solicitanteDelegate delegadoSolicitante) {
        this.delegadoSolicitante = delegadoSolicitante;
    }

    public List<PersonaNatural> getListaPersonas() {
        return listaPersonas;
    }

    public void setListaPersonas(List<PersonaNatural> listaPersonas) {
        this.listaPersonas = listaPersonas;
    }

    public List<PersonaNatural> getListaPersonasFotos() {
        return listaPersonasFotos;
    }

    public void setListaPersonasFotos(List<PersonaNatural> listaPersonasFotos) {
        this.listaPersonasFotos = listaPersonasFotos;
    }

    public String getApeMaterno() {
        return apeMaterno;
    }

    public void setApeMaterno(String apeMaterno) {
        this.apeMaterno = apeMaterno;
    }

    public String getApePaterno() {
        return apePaterno;
    }

    public void setApePaterno(String apePaterno) {
        this.apePaterno = apePaterno;
    }

    public String getDni() {
        return dni;
    }

    public void setDni(String dni) {
        this.dni = dni;
    }

    public String getNombres() {
        return nombres;
    }

    public void setNombres(String nombres) {
        this.nombres = nombres;
    }

    public Boolean getNoHallado() {
        return noHallado;
    }

    public void setNoHallado(Boolean noHallado) {
        this.noHallado = noHallado;
    }

    public Date getFechaAporte() {
        return fechaAporte;
    }

    public void setFechaAporte(Date fechaAporte) {
        this.fechaAporte = fechaAporte;
    }

    public Integer getCantidad() {
        return cantidad;
    }

    public void setCantidad(Integer cantidad) {
        this.cantidad = cantidad;
    }

    public DocumentoDelegate getDelegadoDocumento() {
        return delegadoDocumento;
    }

    public void setDelegadoDocumento(DocumentoDelegate delegadoDocumento) {
        this.delegadoDocumento = delegadoDocumento;
    }

    public DocumentoImagenDelegate getDelegadoDocumentoImagen() {
        return delegadoDocumentoImagen;
    }

    public void setDelegadoDocumentoImagen(DocumentoImagenDelegate delegadoDocumentoImagen) {
        this.delegadoDocumentoImagen = delegadoDocumentoImagen;
    }

    public Documento getDocumento() {
        return documento;
    }

    public void setDocumento(Documento documento) {
        this.documento = documento;
    }

    public DocumentoImagen getDocumentoImagen() {
        return documentoImagen;
    }

    public void setDocumentoImagen(DocumentoImagen documentoImagen) {
        this.documentoImagen = documentoImagen;
    }

    public String getNumeroDocumento() {
        return numeroDocumento;
    }

    public void setNumeroDocumento(String numeroDocumento) {
        this.numeroDocumento = numeroDocumento;
    }

    public Date getFechaFinAporte() {
        return fechaFinAporte;
    }

    public void setFechaFinAporte(Date fechaFinAporte) {
        this.fechaFinAporte = fechaFinAporte;
    }

    public GeneraCuotasDelegate getDelegadoCuotas() {
        return delegadoCuotas;
    }

    public void setDelegadoCuotas(GeneraCuotasDelegate delegadoCuotas) {
        this.delegadoCuotas = delegadoCuotas;
    }
    
    public PagoColegiaturaDelagate getDelegadoPago() {
        return delegadoPago;
    }

    public void setDelegadoPago(PagoColegiaturaDelagate delegadoPago) {
        this.delegadoPago = delegadoPago;
    }

    public Date getFechaBloqueoCuota() {
        return fechaBloqueoCuota;
    }

    public void setFechaBloqueoCuota(Date fechaBloqueoCuota) {
        this.fechaBloqueoCuota = fechaBloqueoCuota;
    }

    public Integer getSeleccion() {
        return seleccion;
    }

    public void setSeleccion(Integer seleccion) {
        this.seleccion = seleccion;
    }

    public List<Transferencia> getListaTransferencias() {
        return listaTransferencias;
    }

    public void setListaTransferencias(List<Transferencia> listaTransferencias) {
        this.listaTransferencias = listaTransferencias;
    }

    public Date getFecha1() {
        return fecha1;
    }

    public void setFecha1(Date fecha1) {
        this.fecha1 = fecha1;
    }

    public Date getFecha2() {
        return fecha2;
    }

    public void setFecha2(Date fecha2) {
        this.fecha2 = fecha2;
    }

    public Date getFechaFin() {
        return fechaFin;
    }

    public void setFechaFin(Date fechaFin) {
        this.fechaFin = fechaFin;
    }

    public Date getFechaIni() {
        return fechaIni;
    }

    public void setFechaIni(Date fechaIni) {
        this.fechaIni = fechaIni;
    }

    public TipoColegiado getTipoColegiado() {
        return tipoColegiado;
    }

    public void setTipoColegiado(TipoColegiado tipoColegiado) {
        this.tipoColegiado = tipoColegiado;
    }

    public boolean getEstado() {
        return estado;
    }

    public void setEstado(boolean estado) {
        this.estado = estado;
    }

    public Colegiado getColegiado() {
        return colegiado;
    }

    public void setColegiado(Colegiado colegiado) {
        this.colegiado = colegiado;
    }

    public ColegiadoDelegate getColegiadoDelegado() {
        return colegiadoDelegado;
    }

    public void setColegiadoDelegado(ColegiadoDelegate colegiadoDelegado) {
        this.colegiadoDelegado = colegiadoDelegado;
    }

    public TransferenciaDelegate getDelegado() {
        return delegado;
    }

    public void setDelegado(TransferenciaDelegate delegado) {
        this.delegado = delegado;
    }

    public Transferencia getTransferencia() {
        return transferencia;
    }

    public void setTransferencia(Transferencia transferencia) {
        this.transferencia = transferencia;
    }

     public String getCodigoCIP() {
        return codigoCIP;
    }

    public void setCodigoCIP(String codigoCIP) {
        this.codigoCIP = codigoCIP;
    }

    public String inicializa(){

        transferencia = new Transferencia();
        colegiado = new Colegiado();
        tipoColegiado = new TipoColegiado();
        documento = new Documento();
        documentoImagen = new DocumentoImagen();
        listaTransferencias = new ArrayList<Transferencia>();
        listaTransferencias = null;

        dirDocumento = "/modulos/colegiatura/archivos/documento/";
        estado = false;
        noHallado = false;
        codigoCIP = "";

        return null;
    }

    public String buscaPorCip(){
        try {

            Integer cifras = codigoCIP.length();
             if(cifras<3){
                 codigoCIP = "0000"+ codigoCIP;
             }else{
                   if(cifras<4){
                       codigoCIP = "000"+codigoCIP;
                   }else{
                       if(cifras<5){
                           codigoCIP = "00"+codigoCIP;
                       }else{
                           if(cifras<6){
                              codigoCIP = "0"+codigoCIP;
                           }
                       }
                   }
             }
            colegiado = colegiadoDelegado.buscaPorCip(codigoCIP);
            if(colegiado.getColnumeroCip()!= null){
                codigoCIP = "";
                mostrarTrans = true;
                return null;
                }else{
                mostrarMensaje("INFO: ", "No se encontro el colegiado...", FacesMessage.SEVERITY_INFO);
                noHallado = true;
                return null;
            }
        } catch (Exception e) {
            
            return null;
        }
    }

    public String buscarColegiado(){

        String ruc;
        Boolean soloColegiados;
        try{
            ruc = "";
            soloColegiados = true;
            ColegiadoImagen foto = new ColegiadoImagen();

            listaPersonasFotos = new ArrayList<PersonaNatural>();
            listaPersonas = new ArrayList<PersonaNatural>();
            listaPersonas = delegadoSolicitante.buscarPerNatural(dni, apePaterno, apeMaterno, nombres, ruc, soloColegiados);
            if(listaPersonas.size()>0){
                for(PersonaNatural per : listaPersonas ){

                    Long codigoPer = per.getSolCodigo();
                    foto = delegadoColImagen.buscaFoto(codigoPer);
                    if(foto != null) {
                       per.setFoto(foto);
                    }
                    listaPersonasFotos.add(per);
                }
                dni = "";
                apePaterno = "";
                apeMaterno ="";
                nombres = "";
        }else{
            noHallado = true;
            mostrarMensaje("INFO: ", "No se encontro el colegiado...", FacesMessage.SEVERITY_INFO);
        }
        }catch(Exception ex){

            return null;
        }
      return null;
    }

    public void drawImagenListaFotos(OutputStream output, Object object) throws IOException{

        PersonaNatural person = new PersonaNatural();

        try {
             Integer index = new Integer(object.toString());
             person = listaPersonasFotos.get(index);
             File file = new File(person.getFoto().getCimRuta());
             FileInputStream inputStream = new FileInputStream(file);
             int tamañoInput = inputStream.available();
             byte[] datos = new byte[tamañoInput];
             inputStream.read(datos, 0, tamañoInput);
             output.write(datos, 0, tamañoInput);

        } catch (Exception e) {

        }
    }

    public String seleccionar(){

        try {
            colegiado = new Colegiado();
            colegiado = colegiadoDelegado.buscaColegiado(persona.getSolCodigo());//buscaPorDni(persona.getPerNroDNI());
            listaPersonasFotos = null; // ultimo cambio
            mostrarTrans = true;
            return null;

        } catch (Exception e) {
            return null;
        }
    }

    public String cerrarVentana(){

        inicializa();
        return null;
    }

    public List<Transferencia> ListarTransferencias(){
        Long codigo = colegiado.getSolCodigo();
        listaTransferencias = new ArrayList<Transferencia>();
        return listaTransferencias = delegado.ListaTransferencia(codigo);
    }

    public String ListaTransferencia(){

        ListarTransferencias();
        return "ir_a_listar";
    }

    public String nuevo(){       

        return "ir_a_transf";
    }

    public String buscarDocumento(){

        try{
            documento = delegadoDocumento.buscaDocumento(numeroDocumento);
            documentoImagen = delegadoDocumentoImagen.buscaDocumentoImagen(documento);

            transferencia.setTrsdocumentoRef(documentoImagen.getDimNombre());
            transferencia.setTrsdirDocumento(documentoImagen.getDimRuta());
            System.out.println("nombre doc: "+transferencia.getTrsdocumentoRef());
            System.out.println("ruta doc: "+transferencia.getTrsdirDocumento());

        }catch(Exception ex){
            
            return null;
        }
        documento = new Documento();
        documentoImagen = new DocumentoImagen();
        return null;
    }

    public String grabar(){

        if(colegiado.getTipoColegiado().getTcoCodigo()==1 ){
           tipoColegiado.setTcoCodigo(4);
           colegiado.setTipoColegiado(tipoColegiado);
//           colegiado.setColfechaAporte(fechaAporte);           
           colegiadoDelegado.edit(colegiado);
        }else{
            if(colegiado.getTipoColegiado().getTcoCodigo()==4 ){
               tipoColegiado.setTcoCodigo(1);
               colegiado.setTipoColegiado(tipoColegiado);
               colegiado.setColfechaAporte(fechaAporte);
               actualizaHabilidad();
               colegiadoDelegado.edit(colegiado);
              }        
        }         
        
        transferencia.setColCodigo(colegiado);
//        transferencia.setTrsdirDocumento(dirDocumento);
        delegado.create(transferencia);
//        colegiado.getListaTransferencia().add(transferencia);
//        colegiadoDelegado.edit(colegiado);

        if(transferencia.getTrstipoTransferencia()==false){

            delegadoPago.anularCuotas(colegiado.getColnumeroCip(),fechaBloqueoCuota);
        }else{
           if(transferencia.getTrstipoTransferencia()==true){

              delegadoCuotas.generarCuotas(fechaAporte, fechaFinAporte, colegiado.getSolCodigo());
           }
        }
        transferencia = new Transferencia();
        dirDocumento = "/modulos/colegiatura/archivos/documento/";
        fechaBloqueoCuota = null;
        fechaAporte = null;
        fechaFinAporte = null;
        estado = false;
        numeroDocumento = "";        
        mostrarMensaje("INFO: ", "Se registro la transferencia del Colegiado...", FacesMessage.SEVERITY_INFO);
        return null;
    }

    public String actualizaHabilidad(){

        Integer mes, year, mesFin;
        String fechaFin = "";
        Date date = new Date();
        DateFormat formatter;

        try{
            SimpleDateFormat sdfm = new SimpleDateFormat("MM");
            mes = Integer.parseInt(sdfm.format(fechaAporte));

            SimpleDateFormat sdfy = new SimpleDateFormat("yyyy");
            year = Integer.parseInt(sdfy.format(fechaAporte));

            switch(mes){
                case 1 : mesFin = mes+3;
                         fechaFin = "30/"+mesFin.toString()+"/"+year.toString();
                         break;
                case 2 : mesFin = mes+3;
                         fechaFin = "31/"+mesFin.toString()+"/"+year.toString();
                         break;
                case 3 : mesFin = mes+3;
                         fechaFin = "30/"+mesFin.toString()+"/"+year.toString();
                         break;
                case 4 : mesFin = mes+3;
                         fechaFin = "31/"+mesFin.toString()+"/"+year.toString();
                         break;
                case 5 : mesFin = mes+3;
                         fechaFin = "31/"+mesFin.toString()+"/"+year.toString();
                         break;
                case 6 : mesFin = mes+3;
                         fechaFin = "30/"+mesFin.toString()+"/"+year.toString();
                         break;
                case 7 : mesFin = mes+3;
                         fechaFin = "31/"+mesFin.toString()+"/"+year.toString();
                         break;
                case 8 : mesFin = mes+3;
                         fechaFin = "30/"+mesFin.toString()+"/"+year.toString();
                         break;
                case 9 : mesFin = mes+3;
                         fechaFin = "31/"+mesFin.toString()+"/"+year.toString();
                         break;
                case 10: mesFin = 1;
                         year = year+1;
                         fechaFin = "31/"+mesFin.toString()+"/"+year.toString();
                         break;
                case 11: mesFin = 2;
                         year = year+1;
                         fechaFin = "28/"+mesFin.toString()+"/"+year.toString();
                         break;
                case 12: mesFin = 3;
                         year = year+1; 
                         fechaFin = "31/"+mesFin.toString()+"/"+year.toString();
                         break;
            }
            formatter = new SimpleDateFormat("dd/MM/yyyy");
            date = (Date)formatter.parse(fechaFin);
            colegiado.setColfechaHabilidad(date);
            colegiado.setColCondicion(true);
            colegiadoDelegado.edit(colegiado);

        return  null;
        }catch(Exception ex){
            return null;
        }     
    }

    public String ir_a_editar(){

        return "ir_a_editar";
    }
    
    public String editar(){

        if(colegiado.getTipoColegiado().getTcoCodigo()==1 ){
           tipoColegiado.setTcoCodigo(4);
           colegiado.setTipoColegiado(tipoColegiado);
           colegiado.setColfechaAporte(fechaAporte);
           colegiadoDelegado.edit(colegiado);
        }else{
            if(colegiado.getTipoColegiado().getTcoCodigo()==4 ){
               tipoColegiado.setTcoCodigo(1);
               colegiado.setTipoColegiado(tipoColegiado);
               colegiado.setColfechaAporte(fechaAporte);
               colegiadoDelegado.edit(colegiado);
              }
        }

        transferencia.setColCodigo(colegiado);
//        transferencia.setTrsdirDocumento(dirDocumento);
//        colegiado.getListaTransferencia().add(transferencia);
        delegado.edit(transferencia);
//        colegiadoDelegado.edit(colegiado);

        if(transferencia.getTrstipoTransferencia()==false){

            delegadoPago.anularCuotas(colegiado.getColnumeroCip(),fechaBloqueoCuota);
        }else{
           if(transferencia.getTrstipoTransferencia()==true){

              delegadoCuotas.generarCuotas(fechaAporte, fechaFinAporte, colegiado.getSolCodigo());
           }
        }
        transferencia = new Transferencia();
        fechaBloqueoCuota = null;
        fechaAporte = null;
        fechaFinAporte = null;
        dirDocumento = "/modulos/colegiatura/archivos/documento/";
        estado = false;
        numeroDocumento = "";
        mostrarMensaje("INFO: ", "Se actualizo la transferencia del Colegiado...", FacesMessage.SEVERITY_INFO);
        return "ver_historial";
    }

    public String cancelar(){

        transferencia = new Transferencia();
        colegiado = new Colegiado();
        estado = false;
        numeroDocumento = "";
        mostrarTrans = false;
        listaPersonasFotos = null;
        listaPersonas = null;
        return null;
    }
    
    public List<Transferencia> ListarTransferenciasOrdenCip(){

        listaTransferencias = new ArrayList<Transferencia>();
        listaTransferencias = delegado.listaPorFechasOrdenCip(fecha1, fecha2);
        cantidad = listaTransferencias.size();
        return listaTransferencias;
    }

    public List<Transferencia> ListarTransferenciasOrdenApellidos(){

        listaTransferencias = new ArrayList<Transferencia>();
        listaTransferencias = delegado.listaPorFechasOrdenApellidos(fecha1, fecha2);
        cantidad = listaTransferencias.size();
        return listaTransferencias;
    }

    public List<Transferencia> ListarTransferenciasOrdenConsejos(){

        listaTransferencias = new ArrayList<Transferencia>();
        listaTransferencias = delegado.listaPorFechasOrdenConsejo(fecha1, fecha2);
        cantidad = listaTransferencias.size();
        return listaTransferencias;
    }

    public List<Transferencia> ListarTransferenciasOrdenFecha(){

        listaTransferencias = new ArrayList<Transferencia>();
        listaTransferencias = delegado.listaPorFechasOrdenFecha(fecha1, fecha2);
        cantidad = listaTransferencias.size();
        return listaTransferencias;
    }

    public List<Transferencia> listaPorFechasTipoOrdenFecha(){

        listaTransferencias = new ArrayList<Transferencia>();
        listaTransferencias = delegado.listaPorFechasTipoOrdenFecha(fecha1, fecha2, tipoTransferencia);
        cantidad = listaTransferencias.size();
        return listaTransferencias;
    }

    public List<Transferencia> listaPorFechasTipoOrdenCIP(){

        listaTransferencias = new ArrayList<Transferencia>();
        listaTransferencias = delegado.listaPorFechasTipoOrdenCip(fecha1, fecha2, tipoTransferencia);
        cantidad = listaTransferencias.size();
        return listaTransferencias;
    }

    public List<Transferencia> listaPorFechasTipoOrdenApellido(){

        listaTransferencias = new ArrayList<Transferencia>();
        listaTransferencias = delegado.listaPorFechasTipoOrdenApellidos(fecha1, fecha2, tipoTransferencia);
        cantidad = listaTransferencias.size();
        return listaTransferencias;
    }

    public List<Transferencia> listaPorFechasTipoOrdenConsejo(){

        listaTransferencias = new ArrayList<Transferencia>();
        listaTransferencias = delegado.listaPorFechasTipoOrdenConsejos(fecha1, fecha2, tipoTransferencia);
        cantidad = listaTransferencias.size();
        return listaTransferencias;
    }


    public String listarTransferenciasPorFecha(){

        try{

      if(opcion == null){
          opcion = 3;
      }
      switch(opcion)  {

          case 1 :
                   if(seleccion==null){
                        seleccion = 1;
                    }
                   switch(seleccion){
                       case 1 : tipoTransferencia = true;
                                listaPorFechasTipoOrdenCIP();
                                break;
                       case 2 : tipoTransferencia = true;
                                listaPorFechasTipoOrdenApellido();
                                break;
                       case 3 : tipoTransferencia = true;
                                listaPorFechasTipoOrdenConsejo();
                                break;
                       case 4 : tipoTransferencia = true;
                                listaPorFechasTipoOrdenFecha();
                                break;
                   }break;
          case 2 :
                   if(seleccion==null){
                        seleccion = 1;
                    }
                   switch(seleccion){
                       case 1 : tipoTransferencia = false;
                                listaPorFechasTipoOrdenCIP();
                                break;
                       case 2 : tipoTransferencia = false;
                                listaPorFechasTipoOrdenApellido();
                                break;
                       case 3 : tipoTransferencia = false;
                                listaPorFechasTipoOrdenConsejo();
                                break;
                       case 4 : tipoTransferencia = false;
                                listaPorFechasTipoOrdenFecha();
                                break;
                   }break;

          case 3 :
                   if(seleccion==null){
                        seleccion = 1;
                    }
                   switch(seleccion){
                       case 1: ListarTransferenciasOrdenCip();
//                               fechaIni = fecha1;
//                               fechaFin = fecha2;
                               break;
                       case 2: ListarTransferenciasOrdenApellidos();
//                               fechaIni = fecha1;
//                               fechaFin = fecha2;
                               break;
                       case 3: ListarTransferenciasOrdenConsejos();
//                               fechaIni = fecha1;
//                               fechaFin = fecha2;
                               break;
                       case 4: ListarTransferenciasOrdenFecha();
//                               fechaIni = fecha1;
//                               fechaFin = fecha2;
                               break;
                   }break;

      }        oculto = true;
        return null;
        }catch(Exception ex){
            oculto = false;
            return null;
        }
    }

    public String mostrarOculto(){

        listaTransferencias = null;
        opcion = null;
        seleccion = null;
        fecha1 = null;
        fecha2 = null;
        oculto = false;
        return null;
    }

    public String retornar(){

        transferencia = new Transferencia();
        return "ir_a_transf";
    }

    public String muestraDoc() throws IOException{

     try{

         Runtime.getRuntime().exec("rundll32 SHELL32.DLL,ShellExec_RunDLL "+transferencia.getTrsdirDocumento());
        }catch(Exception ex){
         ex.printStackTrace();
        }
        return null;
    }

    public String mostrarDoc() {
        try {
            System.out.println("ruta doc: "+transferencia.getTrsdirDocumento());
            File file = new File(transferencia.getTrsdirDocumento());
            FacesContext fcontext = FacesContext.getCurrentInstance();
            ExternalContext eContext = fcontext.getExternalContext();
            HttpServletResponse response = (HttpServletResponse) eContext.getResponse();
            response.setHeader("Content-Disposition", "inline; filename=" + file.getName());
            response.setHeader("Cache-Control", "public");
            response.setContentType("application/" + transferencia.getAplication());
            OutputStream os = response.getOutputStream();
            FileInputStream inputStream = new FileInputStream(file);
            int tamanoInput = inputStream.available();
            byte[] datosPDF = new byte[tamanoInput];
            inputStream.read(datosPDF, 0, tamanoInput);
            os.write(datosPDF, 0, tamanoInput);
            os.close();
            fcontext.responseComplete();

//            HttpServletResponse response = (HttpServletResponse) ControladorAbstracto.getResponse();
//
//            OutputStream os = response.getOutputStream();
//            File file = new File(fileName);
//            FileInputStream inputStream = new FileInputStream(file);
//            int tamanoInput = inputStream.available();
//            byte[] datosPDF = new byte[tamanoInput];
//            inputStream.read(datosPDF, 0, tamanoInput);
//            os.write(datosPDF, 0, tamanoInput);
//
//            inputStream.close();
//            os.close();
        } catch (Exception e) {
            mostrarMensaje("Advertencia: ", "No tiene documento adjunto", FacesMessage.SEVERITY_ERROR);
            return "";
        }
        return "";
    }

    public String eliminar(){

        if(colegiado.getTipoColegiado().getTcoCodigo()==4){
           tipoColegiado.setTcoCodigo(1); 
           colegiado.setTipoColegiado(tipoColegiado);
        }

        if(colegiado.getTipoColegiado().getTcoCodigo()==1){
            tipoColegiado.setTcoCodigo(4);
            colegiado.setTipoColegiado(tipoColegiado);
        }
        colegiadoDelegado.edit(colegiado);
        delegado.remove(transferencia);
        transferencia = new Transferencia();        
        estado = false;
        return null;
    }
    //SUBIR ARCHIVOS   

    private UploadedFile upFile;
    boolean rendSuccess = false;
    boolean rendFailure = false;
    private String imagen;

    public boolean isRendFailure() {
        return rendFailure;
    }

    public void setRendFailure(boolean rendFailure) {
        this.rendFailure = rendFailure;
    }

    public boolean isRendSuccess() {
        return rendSuccess;
    }

    public void setRendSuccess(boolean rendSuccess) {
        this.rendSuccess = rendSuccess;
    }

    public UploadedFile getUpFile() {
        return upFile;
    }

    public void setUpFile(UploadedFile upFile) {
        this.upFile = upFile;
    }

    public String getImagen() {
        return imagen;
    }

    public void setImagen(String imagen) {
        this.imagen = imagen;
    }

    public String upload() throws IOException {

        try {
                InputStream stream = upFile.getInputStream();
                OutputStream out=new FileOutputStream(dirDocumento.concat(upFile.getName()));
                long size = upFile.getSize();
                byte[] buffer = new byte[(int) size];
                stream.read(buffer, 0, (int) size);
                out.write(buffer, 0, (int) size);
                stream.close();
                out.close();
                verDocumento();
                rendSuccess = true;
                rendFailure = false;
//                setImagen(upFile.getName());
                System.out.println("File Upload Successful.");
                return "ok";

        } catch (Exception ioe) {
            System.out.println("File Upload Unsuccessful.");
            System.out.println("errorrrr" + ioe.toString());
            rendSuccess = false;
            rendFailure = true;
            return "no";
        }
    }

    public String verDocumento(){
        estado = true;
        return null;
    }

    public void mostrarMensaje(String resumen, String detalle, FacesMessage.Severity severidad) {
        try {
            FacesMessage fm = new FacesMessage(severidad, resumen, detalle);
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        } catch (Exception e) {
            FacesMessage fm = new FacesMessage(severidad, resumen, detalle);
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        }
    }

}

